const express = require('express');
const router = express.Router();
const Goods = require('../models/Goods');

// 统一响应格式函数
const sendResponse = (res, code = 200, message = 'success', data = null) => {
  res.status(code).json({
    code,
    message,
    data
  });
};

// 统一错误响应函数
const sendError = (res, code = 500, message = '服务器内部错误', error = null) => {
  console.error('API错误:', error);
  res.status(code).json({
    code,
    message,
    data: null
  });
};

// 获取商品列表 - 返回与api/goods.js相同的数据结构
// 支持查询参数：?categoryId=分类ID&name=商品名称（可选，不传则获取全部商品）
router.get('/', async (req, res) => {
  try {
    const { categoryId, name } = req.query;
    const result = await Goods.getAllGoodsWithFilter(categoryId, name);
    
    // 将 total 字段放在与 data 同级
    res.status(200).json({
      code: 200,
      message: 'success',
      total: result.total,
      data: result.data
    });
  } catch (error) {
    sendError(res, 500, '获取商品数据失败', error);
  }
});

// 根据销量排行获取商品（前7个）
router.get('/by-sales', async (req, res) => {
  try {
    const result = await Goods.getTopSales();
    sendResponse(res, 200, 'success', result);
  } catch (error) {
    sendError(res, 500, '获取销量排行商品失败', error);
  }
});

// 获取商品（扁平结构，与/by-sales相同的数据格式）
// 支持查询参数：?categoryId=分类ID&name=商品名称（可选，不传则获取全部商品）
router.get('/all', async (req, res) => {
  try {
    const { categoryId, name } = req.query;
    const result = await Goods.getAllGoodsFlat(categoryId, name);
    
    // 将 total 字段放在与 data 同级
    res.status(200).json({
      code: 200,
      message: 'success',
      total: result.total,
      data: result.list
    });
  } catch (error) {
    sendError(res, 500, '获取商品失败', error);
  }
});

// 获取单个商品详情
router.get('/:id', async (req, res) => {
  try {
    const goodsId = req.params.id;
    const result = await Goods.getById(goodsId);
    
    if (!result) {
      return sendError(res, 404, '商品不存在');
    }
    
    // 为详情添加短暂的HTTP缓存头，减轻重复请求压力
    res.set('Cache-Control', 'public, max-age=30, stale-while-revalidate=60');
    sendResponse(res, 200, 'success', result);
  } catch (error) {
    sendError(res, 500, '获取商品详情失败', error);
  }
});

// 创建新商品
router.post('/', async (req, res) => {
  try {
    const result = await Goods.create(req.body);
    sendResponse(res, 201, '商品创建成功', result);
  } catch (error) {
    if (error.message.includes('必填项') || error.message.includes('不存在')) {
      sendError(res, 400, error.message, error);
    } else {
      sendError(res, 500, '创建商品失败', error);
    }
  }
});

// 更新商品
router.put('/:id', async (req, res) => {
  try {
    const goodsId = req.params.id;
    const success = await Goods.update(goodsId, req.body);
    
    if (!success) {
      return sendError(res, 404, '商品不存在或更新失败');
    }
    
    sendResponse(res, 200, '商品更新成功');
  } catch (error) {
    if (error.message.includes('不存在') || error.message.includes('没有提供')) {
      sendError(res, 400, error.message, error);
    } else {
      sendError(res, 500, '更新商品失败', error);
    }
  }
});

// 删除商品
router.delete('/:id', async (req, res) => {
  try {
    const goodsId = req.params.id;
    const success = await Goods.delete(goodsId);
    
    if (!success) {
      return sendError(res, 404, '商品不存在或删除失败');
    }
    
    sendResponse(res, 200, '商品删除成功');
  } catch (error) {
    if (error.message.includes('不存在')) {
      sendError(res, 404, error.message, error);
    } else {
      sendError(res, 500, '删除商品失败', error);
    }
  }
});


module.exports = router;